package vargapeter.bet.server;

import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.ArrayList;
import java.util.List;

import vargapeter.bet.BookmakerRemote;

/**
 * A manager-ek ősosztálya. A fogadóirodákkal való kapcsolattartásért felel. 
 * Megkapja a létező fogadóirodák címeit, hogy később kommunikálhasson velük.
 */
public class Manager {
	private List<Integer> bookmakerPorts;
	private List<Registry> registries = new ArrayList<Registry>();
	private String server = "bookmakerServer"; /* ezen a néven regisztrálnak a fogadóirodák */
	protected List<BookmakerRemote> bookmakerServers = new ArrayList<BookmakerRemote>();
	
	public Manager(List<Integer> bookmakerPorts) {
		this.bookmakerPorts = bookmakerPorts;
		setupBookmakerConnection();
	}
	
	private void setupBookmakerConnection() {
		try {
			for (Integer bookmaker : bookmakerPorts) {
				/*
				 * cím:port = localhost:bookmaker értékkel kapjuk meg az rmi service-eket,
				 * Ez localhost-ról bármilyen hostname-re (ip-re) változhat ha a szerverek nem egy gépen futnak a kliensekkel
				 */
				registries.add(LocateRegistry.getRegistry("localhost", bookmaker));
			}
			for (Registry registry : registries) {
				/*
				 * Megkeresi a registry-ből a szervereket és egy listában eltárolja őket.
				 */
				bookmakerServers.add((BookmakerRemote)(registry.lookup(server)));
			}
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
	}
}
